package main

import (
	"fmt"
	"log"
	"net/http"

	"mmo/card/internal/config"
	"mmo/card/internal/gateway"
	"mmo/card/internal/protocol"
	"mmo/card/internal/room"
)

func main() {
	// 加载配置
	cfg, err := config.Load()
	if err != nil {
		log.Fatalf("load config error: %v", err)
	}

	// 初始化房间管理（内存版）
	rm := room.NewInMemoryRoomManager(cfg.Game)

	// 初始化 gateway（注入 RoomManager）
	gw := gateway.NewGateway(rm)

	// 可选：添加一个简单日志中间件
	gw.Use(func(next gateway.HandlerFunc) gateway.HandlerFunc {
		return func(c *gateway.Client, env *protocol.Envelope) error {
			log.Printf("[ws] player=%s type=%s room=%s", c.ID(), env.Type, env.RoomID)
			return next(c, env)
		}
	})

	// 注册 WebSocket 路由
	http.HandleFunc(cfg.Server.WebSocketPath, gw.HandleWebSocket)

	addr := fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port)
	log.Printf("listening on %s, ws path=%s", addr, cfg.Server.WebSocketPath)

	// 启动 HTTP 服务
	if err := http.ListenAndServe(addr, nil); err != nil {
		log.Fatalf("server error: %v", err)
	}
}
